package com.zeyu.soc.log.utils;

import java.util.ArrayList;
import java.util.List;

public class ExceptionUtils {

	// ================================================================
	// Constants
	// ================================================================

	// ================================================================
	// Fields
	// ================================================================

	/**
	 * 本地线程-异常列表
	 */
	private static ThreadLocal<List<Throwable>> exceptionList = new ThreadLocal<List<Throwable>>();

	// ================================================================
	// Constructors
	// ================================================================

	// ================================================================
	// Methods from/for super Interfaces or SuperClass
	// ================================================================

	// ================================================================
	// Public or Protected Methods
	// ================================================================

	/**
	 * 激活异常
	 */
	public static void enable() {
		exceptionList.set(new ArrayList<Throwable>());
	}

	/**
	 * 添加异常
	 */
	public static void addThrowable(Throwable e) {
		if (exceptionList.get() == null) {
			return;
		}
		exceptionList.get().add(e);
	}

	/**
	 * 清空异常
	 */
	public static void disable() {
		exceptionList.remove();
	}

	/**
	 * 是否包含异常.
	 */
	public static boolean hasExceptions() {
		if (exceptionList.get() == null) {
			return false;
		}
		if (exceptionList.get().size() > 0) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 打印异常信息.
	 */
	public static String dumpMsg() {
		StringBuilder sb = new StringBuilder();
		for (Throwable t : exceptionList.get()) {
			sb.append(t.getMessage()).append(";");
		}
		return sb.toString();
	}

	// ================================================================
	// Getter & Setter
	// ================================================================

	// ================================================================
	// Private Methods
	// ================================================================

	// ================================================================
	// Inner or Anonymous Class
	// ================================================================

	// ================================================================
	// Test Methods
	// ================================================================
}
